# 1、形参和实参
def get_max_num(a, b):  # 形式参数
    if a >= b:
        print(f'{a}的较大的值')
    else:
        print(f'{b}的较大的值')


# 函数调用：
get_max_num(15, 10)  # 实际参数

# 2、函数参数的传递方式
# 2-1）位置参数传参：函数参数较少时，建议使用位置传参
get_max_num(100, 150)  # 实际参数

# 关键字参数传参：函数参数较多时，建议使用位置传参
get_max_num(b=10, a=15)


# 默认值参数传参：函数参数较多时，设置默认值参数，可以简化调用
def get_max_num(a, b, c='aaaa'):  # 形式参数
    if a >= b:
        print(f'{a}的较大的值')
    else:
        print(f'{b}的较大的值')
    print(f'c的值是：{c}')


# get_max_num(33,122,'0000')
get_max_num(33, 122)

# 可变参数传参
'''
参数打包：在定义时无法确定需要接收多少个数据，那么可以在定义函数时为形参添加“*”或“**”
如果形参的前面加上“*”，那么它可以接收以元组形式打包的多个值；
如果形参的前面加上“**”，那么它可以接收以字典形式打包的多个值
'''


def func1(*args):
    print(args)


# 调用一下：
func1('aa', 'bb')
func1('aa', 'bb', 'cc', 'dd', 'ee')


def func2(**kwargs):
    print(kwargs)


# 调用一下
func2(a='aa', b='bb')
func2(a='aa', b='bb', c='cc')

'''
参数的解包：
调用时接收的实参是元组类型的数据，那么可以使用“*”将元组拆分成多个值
调用时接收的实参是字典类型的数据，那么可以使用“**”将字典拆分成多个键值对
'''


def func3(a, b, c, d, e):
    print(a, b, c, d, e)


# 调用一下：
args = (11, 22, 33, 44, 55)
func3(*args)
print('--------------')
kwargs = {'a': 'aa', 'b': 'bb', 'c': 'cc', 'd': 'cc', 'e': 'cc'}
func3(**kwargs)


# 3、返回值
# 没有返回值
def get_max_num(a, b, c='aaaa'):  # 形式参数
    if a >= b:
        print(f'{a}的较大的值')
    else:
        print(f'{b}的较大的值')


# 返回一个值:重点掌握
def get_max_num(a, b):
    if a >= b:
        return a
    else:
        return b


# 调用一下：
result = get_max_num(111, 123)
print(f'{result}是较大的值')


# 返回多个值：
def func4(a, b, c):
    a += 1
    b += 2
    c += 3
    return a, b, c


# 调用一下：
r1, r2, r3 = func4(1, 10, 100)
print(r1)
print(r2)
print(r3)
